Day 14 建立 PostgreSQL Container 時,有使用到:
-e POSTGRES_PASSWORD=123456
其中 -e 就是用來設定 Environment Variable(環境變數)。
環境變數可以將一些設定值傳入 Container,例如帳號、密碼或資料庫名稱,而不需要直接修改 Image。
PostgreSQL 官方 Image 提供了幾個常用的環境變數:
POSTGRES_USER
POSTGRES_PASSWORD
POSTGRES_DB
POSTGRES_USER 可以設定 PostgreSQL 的使用者名稱。
例如:
-e POSTGRES_USER=myuser
代表建立的 PostgreSQL 使用者名稱為:
myuser
如果沒有特別設定 POSTGRES_USER,預設使用者通常為 postgres。
接著是昨天已經使用過的:
-e POSTGRES_PASSWORD=123456
它負責設定 PostgreSQL 使用者的密碼。
例如:
使用者:myuser
密碼:123456
實際開發時不建議使用 123456 這類簡單密碼,這裡只是為了方便練習。
除了帳號和密碼,也可以透過:
-e POSTGRES_DB=mydb
指定初始化時建立的 Database。
例如我們想建立:
mydb
就不需要等 PostgreSQL 啟動後再手動建立。
把三個環境變數放在一起:
docker run --name my-postgres \
-e POSTGRES_USER=myuser \
-e POSTGRES_PASSWORD=123456 \
-e POSTGRES_DB=mydb \
-p 5432:5432 \
-d postgres
如果是在 Windows PowerShell,也可以直接寫成一行:
docker run --name my-postgres -e POSTGRES_USER=myuser -e POSTGRES_PASSWORD=123456 -e POSTGRES_DB=mydb -p 5432:5432 -d postgres
完成後,我們就會有:
PostgreSQL
│
├── User:myuser
├── Password:123456
└── Database:mydb
建立完成後,可以使用:
docker ps
查看 PostgreSQL 是否正在執行。
如果 Container 沒有正常啟動,可以查看:
docker logs my-postgres
透過 Logs 通常可以找到啟動失敗的原因。
PostgreSQL 官方 Image 的這些初始化環境變數,主要會在資料目錄第一次初始化時使用。
因此如果原本的 PostgreSQL 已經初始化完成,只是停止後重新啟動:
docker start my-postgres
並不會重新建立帳號或資料庫。
可以簡單理解成:
第一次初始化
↓
讀取環境變數
↓
建立使用者與 Database
↓
後續重新啟動
↓
繼續使用原本資料
這個觀念在之後加入 Volume 保存 PostgreSQL 資料時會更加重要。
POSTGRES_PASSWORD → ✅ 建立 PostgreSQL Container 時設定密碼POSTGRES_USER
POSTGRES_PASSWORD
POSTGRES_DB
docker ps 確認 Container 狀態今天進一步學習 PostgreSQL Container 的環境變數,昨天只有設定密碼,今天才知道原來使用者名稱和 Database 名稱也可以在建立 Container 時一起設定。
一開始看到 docker run 後面出現很多個 -e 會覺得指令很長,但拆開來之後其實就是分別設定帳號、密碼與資料庫名稱。
另外也了解到這些 PostgreSQL 環境變數和第一次初始化有關,並不是每次重新啟動 Container 都會重新建立資料庫。接下來就可以搭配之前學過的 Volume,讓 PostgreSQL 裡面的資料真正保存下來。